package com.ejzblog.mall.utils;

import java.math.BigDecimal;

/**
 * <p>
 * Description：BigDecimal 工具类
 * </p>
 *
 * @author Mango
 * @version v1.0.0
 * @ProjectName: community-mall-master
 * @Package: com.ejzblog.mall.utils
 * @date 2021-07-13 16:02
 * @see com.ejzblog.mall.utils
 */
public class BigDecimalUtil {

    private BigDecimalUtil() {

    }

    /**
     * 精确加法 String 类型
     *
     * @param v1 参数
     * @param v2 参数
     * @return 计算结果
     */
    public static BigDecimal add(String v1, String v2) {
        BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1));
        BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2));
        return b1.add(b2);
    }

    public static BigDecimal add(BigDecimal b1, BigDecimal b2) {
        return b1.add(b2);
    }

    /**
     * 精确减法 String 类型
     *
     * @param v1 参数
     * @param v2 参数
     * @return 计算结果
     */
    public static BigDecimal sub(String v1, String v2) {
        BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1));
        BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2));
        return b1.subtract(b2);
    }

    public static BigDecimal sub(BigDecimal b1, BigDecimal b2) {
        return b1.subtract(b2);
    }

    /**
     * 精确乘法 String 类型
     *
     * @param v1 参数
     * @param v2 参数
     * @return 计算结果
     */
    public static BigDecimal mul(String v1, String v2) {
        BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1));
        BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2));
        return b1.multiply(b2);
    }

    public static BigDecimal mul(BigDecimal b1, BigDecimal b2) {
        return b1.multiply(b2);
    }

    /**
     * 精确除法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static BigDecimal div(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, 0, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 单价乘以数量
     *
     * @param price  单价
     * @param number 数量
     * @return
     */
    public static BigDecimal mul(BigDecimal price, Integer number) {
        BigDecimal bigDecimal = new BigDecimal(number);
        return bigDecimal.multiply(price);
    }

    /**
     * 比较大小 BigDecimal 类型
     *
     * @param b1 参数1
     * @param b2 参数2
     * @return 运算结果
     */
    public static boolean equalTo(BigDecimal b1, BigDecimal b2) {
        if (b1 == null || b2 == null) {
            return false;
        }
        return 0 == b1.compareTo(b2);
    }

}
